package cc2_XML_write;

import java.io.*;

import org.w3c.dom.Comment;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

public class CrearFacturaXML {
	
	//V001:03/05/14
		//Objetivo: Crear un XML para enviar al cliente con la factura.
		//Depende de: 
		//-Remitos

	
	Document doc;
	static final String ARCHIVO = "Factura.xml";
	void newDomXML() {
	    try{
	    	//Variables:
	    	String numeroFactura="nro factura";//reemplazar con los valores texto a grabar.
	    	String fechaFacturacion="fecha de facturacion u emision";
	    	String fechaVencimiento="fecha vencimiento pago";
	    	String clienteNroCuil="cuil";
	    	String clienteRazonSocial="rs";
	    	String clienteCondicionIVA="responsable";
	    	String pagoContadoDescuento="10";
	    	String financiacionCantDias="30";
	    	String financiacionRecargo="20";
	    	String remitoNumero="numero remito";
	    	String remitoFecha="fecha del remito";
	    	
	    	//Crea instancia de DocumentBuilderFactory
	        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
	        //obtiene objeto DocumentBuilder
	        DocumentBuilder docBuilder = factory.newDocumentBuilder();
	        //Crea documento DOM en blanco
	        	doc = docBuilder.newDocument();
	        //crea el elemento ra?z y lo agrega al documento
	            Element root = doc.createElement("Factura");
	            root.setAttribute("numero",numeroFactura);
	            doc.appendChild(root);
	        
	        //crea comentario y lo agrega a continuaci?n
	            //Comment comment = doc.createComment("comentario");
	            //root.appendChild(comment);

	        //crea elemento hijo
	            Element hijo = doc.createElement("Fechas");
	        //agrega un atributo al elemento y le asigna un valor
	            //hijo.setAttribute("id","id01");
	            //hijo.setAttribute("valor","valor del atributo");
	            root.appendChild(hijo);
     
	            
	            Element hijo2 = doc.createElement("Emision");
	            //hijo.setAttribute("id","id02");
	            hijo2.setTextContent(fechaFacturacion);
	            hijo.appendChild(hijo2);
	            
	            //Element prm = doc.createElement("parametro");
	            //prm.setTextContent("contenido");
	            //hijo.appendChild(prm);
	            
	            Element hijo3 = doc.createElement("Vencimiento");
	            //hijo.setAttribute("id","id02");
	            hijo3.setTextContent(fechaVencimiento);
	            hijo.appendChild(hijo3);
	            
	            Element hijoCliente = doc.createElement("Cliente");
	            hijoCliente.setTextContent("");
	            root.appendChild(hijoCliente);
	            
	            
	            Element hijoCuil = doc.createElement("Cuil");
	            //hijo.setAttribute("id","id02");
	            hijoCuil.setTextContent(clienteNroCuil);
	            hijoCliente.appendChild(hijoCuil);
	            
	            
	            Element hijoRS = doc.createElement("RazonSocial");
	            //hijo.setAttribute("id","id02");
	            hijoRS.setTextContent(clienteRazonSocial);
	            hijoCliente.appendChild(hijoRS);
	            
	            Element hijoIVA = doc.createElement("CondicionIVA");
	            //hijo.setAttribute("id","id02");
	            hijoIVA.setTextContent(clienteCondicionIVA);
	            hijoCliente.appendChild(hijoIVA);
	            
	           Element hijoCondicionesDeVenta = doc.createElement("CondicionesDeVenta");
	           root.appendChild(hijoCondicionesDeVenta);
	           
	           Element hijoPagoContado = doc.createElement("PagoContado");
	            //hijo.setAttribute("id","id02");
	            hijoPagoContado.setTextContent("");
	            hijoCondicionesDeVenta.appendChild(hijoPagoContado);
	            
	            Element hijoDescuento = doc.createElement("Descuento");
	            //hijo.setAttribute("id","id02");
	            hijoDescuento.setTextContent(pagoContadoDescuento);
	            hijoPagoContado.appendChild(hijoDescuento);
	            
	            Element hijoFinanciacion = doc.createElement("Financiacion");
	            //hijo.setAttribute("id","id02");
	            hijoFinanciacion.setTextContent("");
	            hijoCondicionesDeVenta.appendChild(hijoFinanciacion);
	            
	            
	            Element hijoCantDias = doc.createElement("CantidadDias");
	            //hijo.setAttribute("id","id02");
	            hijoCantDias.setTextContent(financiacionCantDias);
	            hijoFinanciacion.appendChild(hijoCantDias);
	            
	            Element hijoRecargo = doc.createElement("Recargo");
	            //hijo.setAttribute("id","id02");
	            hijoRecargo.setTextContent(financiacionRecargo);
	            hijoFinanciacion.appendChild(hijoRecargo);
	            
	            
	            Element hijoReferencia= doc.createElement("Referencia");
	            hijoReferencia.setTextContent("");
	            root.appendChild(hijoReferencia);
	            
	            Element hijoRemito=doc.createElement("Remito");
	            hijoRemito.setTextContent("");
	            hijoReferencia.appendChild(hijoRemito);
	            
	            Element hijoRemitoNumero=doc.createElement("Numero");
	            hijoRemitoNumero.setTextContent(remitoNumero);
	            hijoRemito.appendChild(hijoRemitoNumero);
	            
	            Element hijoRemitoFecha=doc.createElement("Fecha");
	            hijoRemitoFecha.setTextContent(remitoFecha);
	            hijoRemito.appendChild(hijoRemitoFecha);
	            
	            
	            Element hijoRodamientos=doc.createElement("Rodamientos");
	            hijoRodamientos.setTextContent("");
	            hijoReferencia.appendChild(hijoRodamientos);
	            
	            
	            //WHILE X CADA ITEM
	            
	            //Variables:
	            String itemNumeroSerie="numero de serie";
	            String itemSufijo="valor sufijo";
	            String itemMarca="marca1";
	            String itemOrigen="PaisOrigen";
	            String itemPrecio="$20";//Precio sin IVA.
	            String itemCantidad="1000";
	            
	            Element hijoItem=doc.createElement("Item");
	            hijoItem.setAttribute("serie",itemNumeroSerie);
	            hijoItem.setAttribute("sufijo", itemSufijo);
	            hijoRodamientos.appendChild(hijoItem);
	            
	            Element hijoItemMarca=doc.createElement("Marca");
	            hijoItemMarca.setTextContent(itemMarca);
	            hijoItem.appendChild(hijoItemMarca);
	            
	            Element hijoItemOrigen=doc.createElement("Origen");
	            hijoItemOrigen.setTextContent(itemOrigen);
	            hijoItem.appendChild(hijoItemOrigen);
	            
	            Element hijoItemPrecio=doc.createElement("Precio");//precio sin IVA.
	            hijoItemPrecio.setTextContent(itemPrecio);
	            hijoItem.appendChild(hijoItemPrecio);
	            
	            
	            Element hijoItemCantidad=doc.createElement("Cantidad");
	            hijoItemCantidad.setTextContent(itemCantidad);
	            hijoItem.appendChild(hijoItemCantidad);
	            
	            
	            //FIN WHILE.
	            
	            
	            
	    }catch(Exception e){
	    	System.out.println(e.getMessage());
	    }
	}
	        
	void saveDomXML() {
		//Crea instancia de TransformerFactory
	    TransformerFactory tranFactory = TransformerFactory.newInstance(); 
	    Transformer tran;
		try {
			//Crea un objeto Transformer
			tran = tranFactory.newTransformer();
			//interface Source implementada con un documento dom 
		    Source src = new DOMSource(doc); 
		    //interface Result implementada con un subtipo de OutputStream 
		    Result dest = new StreamResult(new FileWriter(new File(ARCHIVO)));
		    //m?todo transform que enlaza el documento con el stream
		    tran.transform(src, dest); 
		    System.out.print("archivo creado: " + ARCHIVO);
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
	
	public static void main(String[] args) {
		CrearFacturaXML ins = new CrearFacturaXML();
		ins.newDomXML();
		ins.saveDomXML();
	}

}
